home *** CD-ROM | disk | FTP | other *** search
/ MacWorld 1997: The Complete Utilities Toolkit / macworld-complete-utilities-1997.iso / Programming / Little Smalltalk v3.1.5 / Smalltalk Source / file.st < prev    next >
Encoding:
Text File  |  1994-10-16  |  3.1 KB  |  141 lines  |  [TEXT/KAHL]

  1. * Little Smalltalk, version 3
  2. * Written by Tim Budd, Oregon State University, January 1989
  3. *
  4. *  methods for dealing with files
  5. *   these are independent of the stdio package, 
  6. *    work in all systems
  7. *
  8. *  a global variable "files" maintains all currently opened files
  9. *  these are reopened on system initialization time
  10. *
  11. Class File Object name number mode fType        "Changed JRB, 10/94"
  12. *
  13. Methods File 'all'
  14.     asString    | text line |
  15.         text <- ''.
  16.         [ (line <- self getString) notNil ]
  17.             whileTrue: [ text <- text , line ].
  18.         ^ text
  19. |
  20.     name: string
  21.         name <- string
  22. |
  23.     name
  24.         ^ name
  25. |
  26.     getNumber
  27.         " get a file number - called only by open"
  28.         (1 to: 15) do: [:i | (files at: i) isNil
  29.             ifTrue: [ files at: i put: self. number <- i. ^ nil]]
  30. |
  31.     open: m
  32.         self mode: m.
  33.         self open
  34. |
  35.     mode: m
  36.         mode <- m
  37. |
  38.     open
  39.         number notNil ifTrue: [ self close ].
  40.         self getNumber.
  41.         <120 number name mode> isNil
  42.             ifTrue: [ smalltalk error: 
  43.                  'open failed: ', name. ^ false].
  44.         ^ true
  45. |
  46.     close
  47.         " close file, take entry out of global variable "
  48.         number isNil ifTrue: [ ^ nil ].
  49.         files at: number put: nil.
  50.         <121 number>.
  51.         number <- nil.
  52. |
  53.     fileIn
  54.         " read code into the system "
  55.         (number notNil) ifTrue: [<123 number>]
  56. |
  57.     fileIn: name
  58.         self name: name.
  59.         self open: 'r'.
  60.         self fileIn.
  61.         self close.
  62. |
  63.     getString
  64.         ^ (number notNil)
  65.             ifTrue: [<125 number>]
  66. |
  67.     print: aString
  68.         (number notNil)
  69.             ifTrue: [<129 number aString>]
  70.             ifFalse: [smalltalk error: 'file not open']
  71. |
  72.     printNoReturn: aString
  73.         (number notNil)
  74.             ifTrue: [<128 number aString>]
  75.             ifFalse: [smalltalk error: 'file not open']
  76. |
  77.     readUntil: conditionBlock doing: actionBlock    | line |
  78.         [ line <- self getString. line notNil]
  79.             whileTrue: [ (conditionBlock value: line)
  80.                     ifTrue: [ ^ line ].
  81.                     actionBlock value: line ].
  82.         ^ nil
  83. |
  84.     saveImage
  85.         " subtle problem - when we read in image don't want
  86.           image file to be open for writing, so we remove it's
  87.           number from files array temporarily "
  88.         (number notNil)
  89.             ifTrue: [ files at: number put: nil. 
  90.                   <127 number>.
  91.                   files at: number put: self]
  92.             ifFalse: [smalltalk error: 'saveImage: file not open']
  93. ]
  94. Methods File 'all'
  95.     scratchFile
  96.         name <- 'junk.tmp'
  97. |
  98.     delete
  99.         ('rm ', name) unixCommand
  100. ]
  101. Methods Smalltalk 'image'
  102.     saveImage
  103.         self saveImage: (self getPrompt: 'type image name: ').
  104.         ^ 'done'
  105. |
  106.     saveImage: name    
  107.         scheduler critical: [
  108.             " first get rid of our own process "
  109.             scheduler removeProcess: scheduler currentProcess.
  110.         File new;
  111.             name: name;
  112.             open: 'w';
  113.             saveImage;
  114.             close ]
  115. ]
  116. Methods Class 'all'
  117.     fileOut        | f |
  118.         " file out whole class on class.st "
  119.         f <- File new; name: (name asString,'.st'); mode: 'w'; open.
  120.         self fileOutOn: f.
  121.         f close.
  122. |
  123.     fileOutOn: aFile
  124.         " file out class description "
  125.         aFile printNoReturn: 
  126.             'Class ', name , ' ', superClass.
  127.         (variables notNil) ifTrue: [
  128.             variables do: [:v | aFile printNoReturn: ' ', v ]].
  129.         aFile print: ''.
  130.         self fileOutMethodsOn: aFile.
  131. |
  132.     fileOutMethodsOn: aFile
  133.         " file out all methods "
  134.         methods do: [:m |
  135.             aFile print: 'Methods ', name.
  136.             aFile print: m text.
  137.             aFile print: ']'
  138.             ]
  139. ]
  140.